const MessageService = require('../../utils/messageService');

Page({
  data: {
    messageList: [],
    loading: false,
    page: 1,
    pageSize: 20,
    hasMore: true,
    userId: null,
    errorMessage: ''
  },

  onLoad(options) {
    // 获取用户ID（从本地存储或登录信息）
    this.getUserId();
    this.loadMessageData();
  },

  onShow() {
    // 每次显示页面时刷新消息数据
    this.loadMessageData();
  },

  onPullDownRefresh() {
    this.setData({
      messageList: [],
      page: 1,
      hasMore: true,
      errorMessage: ''
    });
    this.loadMessageData();
    wx.stopPullDownRefresh();
  },

  onReachBottom() {
    // 触底加载更多
    if (this.data.hasMore && !this.data.loading) {
      this.loadMoreMessages();
    }
  },

  /**
   * 获取用户ID
   */
  getUserId() {
    try {
      const userInfo = wx.getStorageSync('userInfo');
      if (userInfo && userInfo.userId) {
        this.setData({
          userId: userInfo.userId
        });
      } else {
        // 如果没有用户信息，设置一个默认值用于测试
        this.setData({
          userId: 1
        });
        console.log('未找到用户信息，使用默认用户ID: 1');
      }
    } catch (error) {
      console.error('获取用户信息失败:', error);
      // 设置默认值
      this.setData({
        userId: 1
      });
    }
  },

  /**
   * 加载消息数据
   */
  loadMessageData() {
    this.setData({
      loading: true,
      errorMessage: ''
    });

    console.log('开始加载消息数据，用户ID:', this.data.userId);

    // 使用MessageService批量获取消息
    MessageService.getBatchMessages({
      userId: this.data.userId,
      pageNum: this.data.page,
      pageSize: this.data.pageSize
    }).then((res) => {
      const messages = res.rows || [];
      
      console.log('获取到消息数据:', {
        total: messages.length,
        systemCount: messages.filter(m => m.type === 'system').length,
        orderCount: messages.filter(m => m.type === 'order').length
      });
      
      // 格式化消息数据
      const formattedMessages = messages.map(item => {
        const formatted = MessageService.formatMessage(item);
        
        // 不再需要为订单消息添加缩略图
        // if (formatted.type === 'order') {
        //   formatted.thumbnailUrl = this.getOrderThumbnail(formatted.orderStatus);
        // }
        
        return formatted;
      });

      this.setData({
        messageList: formattedMessages,
        loading: false,
        hasMore: formattedMessages.length >= this.data.pageSize,
        errorMessage: ''
      });

      // 如果没有消息，显示提示
      if (formattedMessages.length === 0) {
        this.setData({
          errorMessage: '暂无消息'
        });
      }
    }).catch((error) => {
      console.error('获取消息数据失败:', error);
      
      // 使用MessageService的错误处理方法
      const errorMsg = MessageService.getErrorMessage(error);
      
      this.setData({
        loading: false,
        errorMessage: errorMsg,
        messageList: []
      });

      // 显示错误提示
      wx.showToast({
        title: errorMsg,
        icon: 'none',
        duration: 3000
      });
    });
  },

  /**
   * 加载更多消息
   */
  loadMoreMessages() {
    if (!this.data.hasMore || this.data.loading) return;

    this.setData({
      loading: true
    });

    const nextPage = this.data.page + 1;
    
    MessageService.getBatchMessages({
      userId: this.data.userId,
      pageNum: nextPage,
      pageSize: this.data.pageSize
    }).then((res) => {
      const newMessages = res.rows || [];
      
      if (newMessages.length > 0) {
        // 格式化新消息
        const formattedNewMessages = newMessages.map(item => {
          const formatted = MessageService.formatMessage(item);
          
          // 不再需要为订单消息添加缩略图
          // if (formatted.type === 'order') {
          //   formatted.thumbnailUrl = this.getOrderThumbnail(formatted.orderStatus);
          // }
          
          return formatted;
        });

        const allMessages = [...this.data.messageList, ...formattedNewMessages];
        
        // 重新排序
        allMessages.sort((a, b) => new Date(b.createTime) - new Date(a.createTime));

        this.setData({
          messageList: allMessages,
          page: nextPage,
          hasMore: newMessages.length >= this.data.pageSize,
          loading: false
        });
      } else {
        this.setData({
          hasMore: false,
          loading: false
        });
      }
    }).catch((error) => {
      console.error('加载更多消息失败:', error);
      
      const errorMsg = MessageService.getErrorMessage(error);
      
      this.setData({
        loading: false
      });

      // 显示错误提示
      wx.showToast({
        title: errorMsg,
        icon: 'none',
        duration: 2000
      });
    });
  },

  /**
   * 消息点击事件
   */
  onMessageTap(e) {
    const { id, type } = e.currentTarget.dataset;
    
    if (type === 'system') {
      // 系统消息：显示详情
      this.showSystemMessageDetail(id);
    } else if (type === 'order') {
      // 订单消息：跳转到相关页面
      this.handleOrderMessage(id);
    }
  },

  /**
   * 显示系统消息详情
   */
  showSystemMessageDetail(id) {
    // 获取消息详情
    MessageService.getMessageDetail(id)
      .then((res) => {
        if (res && res.data) {
          const message = res.data;
          
          // 使用rich-text显示HTML内容
          wx.showModal({
            title: message.title,
            content: this.stripHtmlTags(message.content), // 在弹窗中显示纯文本
            showCancel: false,
            confirmText: '知道了'
          });
        }
      })
      .catch((error) => {
        console.error('获取消息详情失败:', error);
        const errorMsg = MessageService.getErrorMessage(error);
        wx.showToast({
          title: errorMsg,
          icon: 'none'
        });
      });
  },

  /**
   * 处理订单消息
   */
  handleOrderMessage(id) {
    // 获取消息详情
    MessageService.getMessageDetail(id)
      .then((res) => {
        if (res && res.data) {
          const message = res.data;
          
          // 根据订单状态跳转到不同页面
          if (message.orderStatus === 'PENDING') {
            // 待支付：跳转到支付页面
            wx.navigateTo({
              url: `/pages/payment/payment?orderNo=${message.orderNo}`
            });
          } else if (message.orderStatus === 'PAID') {
            // 已支付：跳转到题库页面
            wx.switchTab({
              url: '/pages/questionBank/questionBank'
            });
          } else {
            // 其他状态：显示详情
            wx.showModal({
              title: message.title,
              content: this.stripHtmlTags(message.content), // 在弹窗中显示纯文本
              showCancel: false,
              confirmText: '知道了'
            });
          }
        }
      })
      .catch((error) => {
        console.error('获取订单消息详情失败:', error);
        const errorMsg = MessageService.getErrorMessage(error);
        wx.showToast({
          title: errorMsg,
          icon: 'none'
        });
      });
  },

  /**
   * 移除HTML标签，获取纯文本内容
   * @param {string} html - HTML字符串
   * @returns {string} 纯文本内容
   */
  stripHtmlTags(html) {
    if (!html) return '';
    
    // 简单的HTML标签移除
    return html.replace(/<[^>]*>/g, '');
  },

  /**
   * 标记消息为已读
   */
  markMessageAsRead(id) {
    // 这里可以调用后端接口标记消息为已读
    // 目前后端没有提供此接口，可以后续扩展
    console.log('标记消息为已读:', id);
  },

  /**
   * 重试加载
   */
  retryLoad() {
    this.loadMessageData();
  }
});

